home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / dev / gui / ClassFree_src.lha / ClassFree_src / CFtexticlass / class_lib.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-09-02  |  2.1 KB  |  99 lines

  1. /* Library replacement routines */
  2.  
  3. #include <exec/libraries.h>
  4. #include <clib/exec_protos.h>
  5. #include <intuition/classes.h>
  6. #include <dos/dos.h>
  7. #include "class.h"
  8.  
  9. #pragma libbase classbase  /* So StormCs linker knows the libbase size.. */
  10.  
  11. extern struct ExecBase *SysBase;
  12. struct Library *IntuitionBase;
  13. struct Library *UtilityBase;
  14. struct Library *GfxBase;
  15.  
  16. BPTR LibExpunge();
  17.  
  18. struct classbase *LibInit(
  19.     register __d0 struct classbase *base,
  20.     register __a0 BPTR seglist,
  21.     register __a6 APTR sysbase)
  22. {
  23.   base->seglist = seglist;
  24.   SysBase = sysbase;
  25.   if(IntuitionBase = OpenLibrary("intuition.library",37))
  26.   {
  27.     if(UtilityBase = OpenLibrary("utility.library",37))
  28.     {
  29.      if(GfxBase = OpenLibrary("graphics.library",37)) return(base);
  30.      CloseLibrary(UtilityBase);
  31.     }
  32.     CloseLibrary(IntuitionBase);
  33.   }
  34.   return(NULL);
  35. }
  36.  
  37. struct Library *LibOpen(register __a6 struct classbase *base)
  38. {
  39.   if(!(base->library.lib_OpenCnt)) initclass(base);
  40.   base->library.lib_Flags &= ~LIBF_DELEXP;
  41.   base->library.lib_OpenCnt++;
  42.   return((struct Library *)base);
  43. }
  44.  
  45. BPTR LibClose(register __a6 struct classbase *base)
  46. {
  47.   base->library.lib_OpenCnt--;
  48.   if(!base->library.lib_OpenCnt)
  49.     if(base->library.lib_Flags&LIBF_DELEXP) return(LibExpunge());
  50.   return(NULL);
  51. }
  52.  
  53. BPTR LibExpunge(register __a6 struct classbase *base)
  54. {
  55.   BPTR result;
  56.   UBYTE *libmem;
  57.   LONG libsize;
  58.  
  59.   if(base->library.lib_OpenCnt)
  60.   {
  61.     base->library.lib_Flags |= LIBF_DELEXP;
  62.     return(NULL)
  63.   }
  64.   else
  65.   {
  66.     result = base->seglist;
  67.     Remove((struct Node *)base);
  68.     CloseLibrary(GfxBase);
  69.     CloseLibrary(UtilityBase);
  70.     CloseLibrary(IntuitionBase);
  71.     removeclass(base);
  72.     libmem = (UBYTE *)base;
  73.     libsize = base->library.lib_NegSize;
  74.     libmem -= libsize;
  75.     libsize += base->library.lib_PosSize;
  76.     FreeMem(libmem,libsize);
  77.     return(result);
  78.   }
  79. }
  80.  
  81.  ULONG LibNull(void)
  82. {
  83.   return(NULL);
  84. }
  85.  
  86.  
  87. /* This function converts register-parameter hook calling
  88.  * convention into standard C conventions.
  89.  */
  90. ULONG hookEntry(
  91.     register __a0 struct Hook *h,
  92.     register __a2 VOID *o,
  93.     register __a1 VOID *msg)
  94. {
  95.     return ((*h->h_SubEntry)(h, o, msg));
  96. }
  97.  
  98.  
  99.